package com.cnpc.fyutils;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 音乐播放工具类
 * 调用该工具类之前，需要在APP开端初始化该工具类
 * Created by songzhiiyn on 2017/2/3.宋志银
 */

public class Play_Music_Util {
    public static SoundPool soundPool; //声音池
    private static Map<String, Integer> mapSRC;

    /**
     * 检验音频文件是否已经存储
     * @return
     */
    public static boolean IsdataMusic() {
        if(mapSRC==null||mapSRC.size()==0){
            return false;
        }
        return true;
    }

    /**
     * 对raw中的本地音频资源进行预加载，并初始化SoundPool
     *
     * @param context 调用该方法的activity、fragment等上下文对象
     * @param musics  音频资源集合Map<String, Integer> mapSRC集合的大小要小于200，
     *                String传递音频文件的名称不带后缀名，
     *                Integer传递 音频文件的ID（R文件中的）
     */
    public static void initmusic(Context context, HashMap<String, Integer> musics) {
        try {
            soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
            mapSRC = new HashMap<String, Integer>();
            Set set = musics.keySet();
            for (Object key : set) {
                mapSRC.put((String) key, soundPool.load(context, musics.get(key), 0));

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 播放声音池的声音
     *
     * @param music_raw 音频资源文件名称
     */
    public static void playmusic(String music_raw) {
        int endIndex = music_raw.lastIndexOf(".");
        try {
            String Music = music_raw;
            if (endIndex > 0) {
                Music = music_raw.substring(0, endIndex);
            }

            soundPool.play(mapSRC.get(Music),//播放的声音资源
                    1.0f,//左声道，范围为0--1.0
                    1.0f,//右声道，范围为0--1.0
                    0, //优先级，0为最低优先级
                    0,//循环次数,0为不循环
                    1.0f);//播放速率，1.0f为正常速率
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭SoundPool控件,释放资源
     */
    public static void destroymusic() {
        try {
            if (soundPool != null) {
                soundPool.release();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
